/*
 *   Copyright © 2011-2015 Kinghood Group All Rights Reserved.
 *   未经本公司正式书面同意，其他任何个人、团体不得使用、复制、修改或发布本软件.
 *   版权所有深圳金雅福控股集团有限公司 www.jinyafu.com.
 */

package com.zhang.mysql;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 000062064
 * @title: MybatisPlusConfig
 * @projectName custom_ms
 * @description: MybatisPlus配置
 * 官方文档：http://mp.baomidou.com
 * @date 2019/6/12 9:59
 */
@Configuration
@AutoConfigureAfter(DataHikarSourceConfig.class)
public class MybatisPlusConfig implements EnvironmentAware{

    private Environment environment;

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
    @Bean
    public static DataSource routingDataSource(
            @Qualifier("masterDataSource") DataSource masterDataSource,
            @Qualifier("slave1DataSource") DataSource slave1DataSource,
            @Qualifier("slave2DataSource") DataSource slave2DataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DBTypeEnum.MASTER, masterDataSource);
        targetDataSources.put(DBTypeEnum.SLAVE1, slave1DataSource);
        targetDataSources.put(DBTypeEnum.SLAVE2, slave2DataSource);
        RoutingDataSource routingDataSource = new RoutingDataSource();
        routingDataSource.setDefaultTargetDataSource(masterDataSource);
        routingDataSource.setTargetDataSources(targetDataSources);
        return routingDataSource;
    }

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }


//
//    // 创建全局配置
//    @Bean
//    public GlobalConfig globalConfig() {
//        // 全局配置文件
//        GlobalConfig globalConfig = new GlobalConfig();
//        GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
//        // 默认为自增
//        dbConfig.setIdType(IdType.ID_WORKER);
//        // 手动指定db 的类型, 这里是mysql
//        dbConfig.setDbType(DbType.MYSQL);
//        globalConfig.setDbConfig(dbConfig);
//        dbConfig.setLogicDeleteValue("1");
//        dbConfig.setLogicNotDeleteValue("0");
//        // 逻辑删除注入器
//        LogicSqlInjector injector = new LogicSqlInjector();
//        globalConfig.setSqlInjector(injector);
//        return globalConfig;
//    }
//
//    /**
//     * 配置文件来配置扫描Mapper的路径
//     * 相当于顶部的：
//     * {@code @MapperScan("com.baomidou.springboot.mapper*")}
//     */
//    @Bean
//    public MapperScannerConfigurer mapperScannerConfigurer() {
//        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
//        scannerConfigurer.setBasePackage("com.jinyafu.user.infrastructure.mapper");
////        scannerConfigurer.setBasePackage(environment.getProperty("mybatis-plus.basepackage"));
//        return scannerConfigurer;
//    }
//
//
//
//    @Bean
//    public SqlSessionFactory sqlSessionFactory(DataSource routingDataSource,GlobalConfig globalConfig) throws Exception {
//        MybatisSqlSessionFactoryBean  sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean ();
//        sqlSessionFactoryBean.setDataSource(routingDataSource);
//        // 配置文件已经扫描
//        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(environment.getProperty("mybatis-plus.mapper-locations")));
//        // 扩展mybatis配置
//        MybatisConfiguration configuration = new MybatisConfiguration();
//        configuration.setJdbcTypeForNull(JdbcType.NULL);
//        configuration.setMapUnderscoreToCamelCase(true);
//        configuration.setCacheEnabled(true);
//        configuration.setLogImpl(StdOutImpl.class);//开始mysqlplus日志打印
//        configuration.setGlobalConfig(globalConfig);
//        configuration.setCallSettersOnNulls(true);           //数据库查询字段如果为null，返回给前端则不会有该字段
//        sqlSessionFactoryBean.setConfiguration(configuration);
//
//        sqlSessionFactoryBean.setPlugins(new Interceptor[]{
//                paginationInterceptor(), // 加入分页
//                new OptimisticLockerInterceptor()//乐观锁
//        });
//
//        return sqlSessionFactoryBean.getObject();
//    }
//
//
//    /**
//     *
//     * 一旦开启了事物，好像就会切换线程执行，所以并不会使用当前配置的数据源，而会取到默认的数据源，所以只能通过将默认数据源设置为master。
//     *
//     * @return
//     */
//    @Bean
//    public PlatformTransactionManager platformTransactionManager(DataSource routingDataSource) {
//        return new DataSourceTransactionManager(routingDataSource);
//    }
//
//    /**
//     * 打印 sql
//     *  SQL执行效率插件【生产环境可以关闭】
//     */
//    @Bean
//    public PerformanceInterceptor performanceInterceptor() {
//        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
//        //格式化sql语句
//        Properties properties = new Properties();
//        properties.setProperty("format", "true");
//        performanceInterceptor.setProperties(properties);
//        return performanceInterceptor;
//    }


}
